﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;

namespace Camping_Project.Forms
{
    public partial class FormEncoder : Form
    {
        private Camping_BDD bdd = new Camping_BDD();
        private int idEmploye;
        //private int emplacementSelectionne = 0;
        private bool type;
        private bool poule = false;
        public int id = -1;
        private FormDispo fd;
        public DateTime dateSelectionnee;
        public DateTime dateLimite;
        public Boolean test = false;
        DateTime maintenant = DateTime.Now;

        public FormEncoder(int idEmploye)
        {
            InitializeComponent();
            this.idEmploye = idEmploye;
        }

        private void FormEncoder_Load(object sender, EventArgs e)
        {
            //Ajout des clients dans la datagridview
            refreshDGVClient();
            //Initialisation des parametres dans les checkboxes
            initCheckbox();
            //Initialisation progressBar
            getFormParent().getProgressBar().Value = 0;
            //Cacher les elements concernant les dates de fin du séjour
            label2.Visible = false;
            label3.Visible = false;
            departApprox.Visible = false;
            departDef.Visible = false;
            approCheck.Visible = false;
            defCheck.Visible = false;
        }

        public void refreshDGVClient()
        {
            //this.dataGridViewClients.DataSource = from c in bdd.Client select c;
            this.dgvClient.DataSource = from c in bdd.Client select new {c.IDClient,c.Nom,c.Prenom,c.Adresse,c.Ville,c.Email};
        }

        public void initCheckbox()
        {
            int i;
            //Init enfants animaux adultes

            for (i = 0; i <= 10; i++)
            {
                comNbEnfant.Items.Add(i);
                comNbAdultes.Items.Add(i);
                comNbAnimal.Items.Add(i);
                comNbVehic.Items.Add(i);
            }

            comTypeEmpl.Items.Add("Tente");
            comTypeEmpl.Items.Add("Caravane/Mobile home");

            if (!defCheck.Checked)
            {
                departDef.Enabled = false;
            }

            if (!approCheck.Checked)
            {
                departApprox.Enabled = false;
            }



        }

        private void button1_Click(object sender, EventArgs e)
        {

            //MessageBox.Show("Emplacement numéro " + this.id);
            //Recuperation de l'id de la ligne sélectionnée (client)
            int ligne = dgvClient.SelectedCells[0].RowIndex;
            int id = (int)dgvClient["iDClientDataGridViewTextBoxColumn", ligne].Value;
            Camping_BDD bdd = new Camping_BDD();
           // DateTime dateDepartDef = new DateTime();
           // DateTime dateArriveee = new DateTime();
            float prixAdulte=0,prixAnimal=0,prixElec=0,prixEnf=0,prixNuit=0,prixVehic=0,prixTotal=0;
            //bool type=false;
            bool elec=false;

            //MessageBox.Show(Convert.ToString(id));

            ObjectQuery<Tarif> tarif = bdd.Tarif;


            //Selection des données du tarif dans la table Tarif
            var query =
                    from tar in bdd.Tarif
                    select new
                    {
                        tar.PrixAdulte,tar.PrixAnimal,tar.PrixElectricite,tar.PrixEnfant,tar.PrixNuit,tar.PrixVehicule
                    };
            foreach (var r in query)
            {
                prixAdulte = (float)r.PrixAdulte * Convert.ToInt32(comNbAdultes.SelectedItem);
                prixAnimal = (float)r.PrixAnimal * Convert.ToInt32(comNbAnimal.SelectedItem);
                prixEnf = (float)r.PrixEnfant * Convert.ToInt32(comNbEnfant.SelectedItem);

                if (chkElec.Checked)
                {
                    prixElec = (float)r.PrixElectricite;
                }
                else
                {
                    prixElec = 0;
                }
                    


                if (defCheck.Checked)
                {
                    //dateDepartDef = DateTime.Parse(departDef.Text);
                    //dateArriveee = DateTime.Parse(dateArrivee.Text);
                    TimeSpan diff = DateTime.Parse(departDef.Text) - DateTime.Parse(dateArrivee.Text);
                    int diffInt = Convert.ToInt32(diff.TotalDays);
                    prixNuit = (float)r.PrixNuit * diffInt;
                }
                else
                {
                    prixNuit = 0;
                }


                prixVehic = (float)r.PrixVehicule * Convert.ToInt32(comNbVehic.SelectedItem);


                if (defCheck.Checked)
                {
                    prixTotal = prixNuit + prixAdulte + prixEnf + prixAnimal + prixVehic + prixElec;
                }
                else
                {
                    prixTotal = 0;
                }


            }

            if (comTypeEmpl.Text == "Tente")
            {
                type = false; // Si tente ...
                //MessageBox.Show("Tente");
            }
            else
            {
                type = true; //Si caravane etc ...
                //MessageBox.Show("caravane");
            }
            /*
            if(comTypeEmpl.SelectedItem.Equals("Tente"))
            {
                type = false; // Si tente ...
                MessageBox.Show("Tente");
            }
            else
            {
                type = true; //Si caravane etc ...
                MessageBox.Show("caravane");
            }*/

            if(chkElec.Checked)
            {
                elec = true; // Si electricité
            }
            else
            {
                elec = false; //Si pas electricité
            }

           // prixTotal = 

            if (poule == true)
            {
                Reservation reserv = new Reservation { IDClient = id, DateDebut = DateTime.Parse(dateArrivee.Text), DateFinApprox = DateTime.Parse(departApprox.Text), DateFinDef = DateTime.Parse(departDef.Text), TypeEmp = this.type, NbAdultes = Convert.ToInt32(comNbAdultes.SelectedItem), NbEnfants = Convert.ToInt32(comNbEnfant.SelectedItem), NbAnimaux = Convert.ToInt32(comNbAnimal.SelectedItem), NbVehicules = Convert.ToInt32(comNbVehic.SelectedItem), Electricite = elec, PrixAdulte = prixAdulte, PrixAnimal = prixAnimal, PrixElectricite = prixElec, PrixEnfant = prixEnf, PrixNuit = prixNuit, PrixVehicule = prixVehic, PayementEffectue = false, IDEmploye = idEmploye, IDEmplacement = fd.getIdentfiant(), Valide = true, PrixTotal = prixTotal };
                bdd.Reservation.AddObject(reserv);
                bdd.SaveChanges();
                getFormParent().getProgressBar().Value = 100;
                MessageBox.Show("La réservation a bien été effectuée pour le client ID : " + Convert.ToString(id), "Succes de l'opération");
            }
            else
            {
                MessageBox.Show("Veuillez remplir tous les champs");
            }
        }

        //Renvoit la form parent qui contient la form actuelle
        public FormEmploye getFormParent()
        {
            FormEmploye parent = (FormEmploye)this.MdiParent;
            return parent;
        }

        private void approCheck_CheckedChanged(object sender, EventArgs e)
        {
            if (!approCheck.Checked)
            {
                departApprox.Enabled = false;
                departDef.Enabled = true;
            }
            else
            {
                departApprox.Enabled = true;
                departDef.Enabled = false;
                defCheck.Checked = false;
            }
        }

        private void defCheck_CheckedChanged(object sender, EventArgs e)
        {
            if (!defCheck.Checked)
            {
                departDef.Enabled = false;
                departApprox.Enabled = true;
            }
            else
            {
                departDef.Enabled = true;
                departApprox.Enabled = false;
                approCheck.Checked = false;
            }

         
        }

        private void emplCmd_Click(object sender, EventArgs e)
        {
            if (test == true)
            {
                poule = true;
                fd = new FormDispo(this, this.type, this.id, this.dateSelectionnee, this.dateLimite);
                fd.ShowDialog();
            }
            /*this.fd = new FormDates(this.type);
            fd.ShowDialog();
            */
            else
                MessageBox.Show("Veuillez d'abord compléter les autres informations!", "information incomplêtes",MessageBoxButtons.OK , MessageBoxIcon.Exclamation);
        }

        private void comTypeEmpl_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comTypeEmpl.SelectedItem.Equals("Tente"))
            {
                this.type = false; // Si tente ...
            }
            else
            {
                this.type = true; //Si caravane etc ...
            }
        }

        private int getId()
        {
            return id;
        }

        private void setId(int id)
        {
            this.id = id;
        }

        private void dateArrivee_ValueChanged(object sender, EventArgs e)
        {
            if (dateArrivee.Value < maintenant)
            {
                MessageBox.Show("Vous ne pouvez pas réserver pour une date passée!!");
                dateArrivee.Value = maintenant;
            }else
            {
                dateSelectionnee = dateArrivee.Value;
                label2.Visible = true;
                label3.Visible = true;
                departApprox.Visible = true;
                departDef.Visible = true;
                approCheck.Visible = true;
                defCheck.Visible = true;
            }
        }

        private void departApprox_ValueChanged(object sender, EventArgs e)
        {

            if (departApprox.Value < dateSelectionnee)
            {
                MessageBox.Show("Vous ne pouvez pas repartir du camping avant d'y être venu!!");
                departApprox.Value = dateSelectionnee;
            }
            else
            {
                test = true;
                dateLimite = departApprox.Value;
                departDef.Value = departApprox.Value;
            }
        }

        private void departDef_ValueChanged(object sender, EventArgs e)
        {
            if (departDef.Value < dateSelectionnee)
            {
                MessageBox.Show("Vous ne pouvez pas repartir du camping avant d'y être venu!!");
                departDef.Value = dateSelectionnee;
            }
            else
            {
                test = true;
                dateLimite = departDef.Value;
                departApprox.Value = departDef.Value;
            }
        }

    }
}
